package com.southwind;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.ArrayList;
import java.util.List;
/**
 * <p>
 * MyBatis Plus代码生成器主入口，用于自动生成Entity、Mapper、Mapper XML、Service、ServiceImpl、Controller等文件。
 * </p>
 */
public class Main {
    public static void main(String[] args) {
        // 创建代码生成器实例
        AutoGenerator autoGenerator = new AutoGenerator();
        // 配置数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL);// 设置数据库类型
        dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");// 设置数据库驱动
        dataSourceConfig.setUsername("root");// 设置数据库用户名
        dataSourceConfig.setPassword("173920"); // 设置数据库密码
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=UTF-8");// 设置数据库URL
        autoGenerator.setDataSource(dataSourceConfig);// 将数据源配置设置到生成器
        // 全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOpen(false);// 禁止打开输出目录
        globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");// 设置输出目录
        globalConfig.setAuthor("admin");// 设置作者
        globalConfig.setServiceName("%sService");// 设置Service接口名后缀
        autoGenerator.setGlobalConfig(globalConfig); // 将全局配置设置到生成器
        // 包配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.southwind");// 设置父包名
        packageConfig.setEntity("entity");// 设置实体类包名
        packageConfig.setMapper("mapper");// 设置Mapper接口包名
        packageConfig.setController("controller");// 设置Controller包名
        packageConfig.setService("service");// 设置Service接口包名
        packageConfig.setServiceImpl("service.impl");// 设置ServiceImpl实现类包名
        autoGenerator.setPackageInfo(packageConfig); // 将包配置设置到生成器
        // 策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setEntityLombokModel(true);// 开启实体类Lombok模式
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);// 设置表名转换策略为下划线转驼峰
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);// 设置列名转换策略为下划线转驼峰
// 自动填充配置
        List<TableFill> list = new ArrayList<>();
        TableFill tableFill1 = new TableFill("create_time", FieldFill.INSERT);// 插入时填充创建时间
        TableFill tableFill2 = new TableFill("update_time",FieldFill.INSERT_UPDATE);// 插入和更新时填充更新时间
        list.add(tableFill1);
        list.add(tableFill2);

        strategyConfig.setTableFillList(list);// 设置自动填充列表

        autoGenerator.setStrategy(strategyConfig);// 将策略配置设置到生成器
// 执行生成代码
        autoGenerator.execute();
    }
}
